package com.litelimit.core.limit.annotation;


import com.litelimit.core.strategy.core.LimitMethod;
import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 限流注解
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LiteLimit {

    @AliasFor("strategy")
    LimitMethod value() default LimitMethod.LIMIT_IP;        // 限流策略

    @AliasFor("value")
    LimitMethod strategy() default  LimitMethod.LIMIT_IP;    // 限流策略

    String key() default "";              // 当限流策略为custom时必须指定key值，否则报错

    String group()  default "";           // 限流分组，实现批量管理

    int period() default 1;               // 周期值

    TimeUnit unit() default TimeUnit.SECONDS;     // 周期单位

    int max() default 60;         // 周期内允许通过的最大请求数
}
